package com.zrrd.ks.t5;

import com.zrrd.ks.t3.Person;
import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;

/**
 * @author WanJl
 * @version 1.0
 * @title T5
 * @description
 * @create 2023/11/26 9:54
 */
public class T5 {

    static Map<Integer, Person> map = new HashMap();

    /**
     * 第4题
     *
     * @param p
     * @return
     */
    public static boolean saveToSet(Object o, Person p) {
        if (o instanceof Map) {
            Map m = (Map) o;
            m.put(p.getId(), p);
            System.out.println("加入到map集合");
        } else if (o instanceof Set) {
            Set s = (Set) o;
            s.add(p);
            System.out.println("加入到set集合");
        } else if (o instanceof List) {
            List<Person> list = (List) o;
            //循环遍历一下list集合，然后比较即将加入的元素和已经有的元素，是否相同。
            for (Person p1 : list) {
                if (p.equals(p1)) {
                    return false;
                }
            }
            list.add(p);
            System.out.println("加入到list集合");
        } else {
            System.out.println("报错");
            throw new RuntimeException();
        }
        return true;
    }
    @Test
    public void method(){
        Collection<Person> c=new ArrayList<>();
        saveToSet(c,new Person());
    }


    /**
     * 第5题
     *
     * @param map
     * @return
     */
    public static boolean saveToFile(Map<Integer, Person> map) {
        //获取所有的value
        //获取value的前提是要先获取到key，获取所有value的前提，是先获取所有key
        Set<Integer> keySet = map.keySet();//把map集合中所有的key，抽取出来组成一个set集合。
        for (Integer k : keySet) {
            Person value = map.get(k);
            try {
                saveElement(value);
            } catch (IOException e) {
                return false;
            }
        }
        return true;

    }

    public static boolean saveToFile(Set<Person> set) {
        for (Person p : set) {
            try {
                saveElement(p);
            } catch (IOException e) {
                return false;
            }
        }
        return true;
    }

    public static boolean saveToFile(List<Person> list) {
        for (Person p : list) {
            try {
                saveElement(p);
            } catch (IOException e) {
                return false;
            }
        }
        return true;

    }


    private static void saveElement(Person p) throws IOException {
        FileOutputStream fos = new FileOutputStream("./Persons.txt", true);
        fos.write(p.toString().getBytes());
        fos.close();
    }

    @Test
    public void met() {
        try {
            saveElement(new Person(2, "李四", 25, "男"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
